#ifndef GRAMMAR_PARSER_H
#define GRAMMAR_PARSER_H
#pragma once
#include <string>
#include <tuple>
#include "rule_traits.hpp"

class GrammarParser
{
	struct GrammarParserImpl;

public:
	GrammarParser();
	GrammarParser(GrammarParser &) = delete;
	GrammarParser(GrammarParser &&) = delete;
	GrammarParser &operator=(GrammarParser &) = delete;
	GrammarParser &operator=(GrammarParser &&) = delete;
	~GrammarParser();
    std::shared_ptr<RuleCollection> ruleElementCollections();
    std::shared_ptr<RuleCollection> invisibleRuleCollections();
	void init(const std::string &text);

private:
	std::unique_ptr<GrammarParserImpl> impl_;
};
#endif
